Metadata-Version: 2.4
Name: yt-dlp-ejs
Version: 0.8.1.dev2+g2231f1fd6
Summary: External JavaScript for yt-dlp supporting many runtimes
Project-URL: Documentation, https://github.com/yt-dlp/ejs#readme
Project-URL: Issues, https://github.com/yt-dlp/ejs/issues
Project-URL: Source, https://github.com/yt-dlp/ejs
Author-email: Simon Sawicki <contact@grub4k.dev>
License-Expression: Unlicense AND MIT AND ISC
License-File: LICENSE
Keywords: yt-dlp
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# yt-dlp-ejs

External JavaScript for yt-dlp supporting many runtimes

## Manual Installation

Install ejs into the same environment as yt-dlp:

```console
pip install -U yt-dlp-ejs
```

## Development

The project provides lockfiles for every supported package manager.

If you only have Python and a JS runtime, then you may instead run `./hatch_build.py`.
This will transparently invoke one of the supported JS runtimes for the build.

If you notice differences between different runtimes' builds
please open an issue [here](<https://github.com/yt-dlp/ejs/issues/new>).

### Build

To build the Python package you need a PEP518 compatible builder.
The build hook will automatically invoke `deno`, `bun` or `node` as required.

Alternatively, to only build the JavaScript files you can run the `bundle` script manually:

```bash
python hatch_build.py
```

This will automatically select an available runtime and build using it.

For more fine-grained control over how to build the package, you can set these environment variables:
- `EJS_BUILD_SKIP_INSTALL`: If this environment variable is set, the install step will be skipped.
  It is expected that the required packages are available for the selected bundler.
  No network access should be required if this variable is set.
- `EJS_BUILD_INSTALLER`: Order of installers to try, separated by `:` on POSIX or `;` on Windows.
  These will be used to install the required dependencies for bundling the JavaScript package.
  Can be any of `pnpm`, `deno`, `bun` or `npm` (this is also the default order).
- `EJS_BUILD_BUNDLER`: Order of bundlers to try, separated by `:` on POSIX or `;` on Windows.
  These will be used to perform the bundling of the JavaScript package (calling rollup under the hood).
  Can be any of `esbuild`, `pnpm`, `deno`, `bun`, `node` (this is also the default order).

### Tests

First, make sure the project's dependencies are installed and download the player JS files:

```bash
# Deno:
deno install --frozen
deno run src/yt/solver/test/download.ts

# Bun:
bun install --frozen-lockfile
bun --bun run src/yt/solver/test/download.ts

# Node 22.6+:
npm ci
node --experimental-strip-types src/yt/solver/test/download.ts
```

Then the tests can be run:

```bash
# Deno
deno test

# Bun
bun test

# Node
node --test
```

## Upgrading packages

When upgrading packages in package.json, all lockfiles must be updated simultaneously.
To do this, run the following commands:

```bash
# Upgrade packages automatically (or manually adjust versions)
pnpm upgrade --latest

# Generate base `package-lock.json`
rm -rf node_modules
npm install

# Migrate to other package managers
pnpm import
bun pm migrate --force

# Make sure to use a deno with lockfile v4 (<2.3)
deno install --lockfile-only

# Ensure that `deno.json` is the same as `package-lock.json`.
# Note: you may need to manually update the `ADDITIONAL_PACKAGES_NODE`
# and/or `ADDITIONAL_PACKAGES_DENO` variables in `./check.py`.
python check.py
```

## Licensing

This code is licensed under [Unlicense](<https://unlicense.org/>).

An exception to this is the prebuilt wheels, which contain both
[`meriyah`](<https://github.com/meriyah/meriyah>) and [`astring`](<https://github.com/davidbonnet/astring>),
licensed under [`ISC`](<https://github.com/meriyah/meriyah?tab=ISC-1-ov-file>) and [`MIT`](<https://github.com/davidbonnet/astring?tab=MIT-1-ov-file>), respectively.
